package com.sdgs.app.utils;

import java.util.List;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.sdgs.app.base.BaseDTO;
import com.sdgs.app.base.BaseEntity;

/**
 * DTO转换；通过JSON转换。
 *
 * @author shichengqun
 */
public class EntityDtoConvertUtil {


    /**
     * 把entity转到dto
     *
     * @param entity
     * @param cla
     * @return dto
     */
    public static <T> T convertToDTO(BaseEntity entity, Class<T> cla) {

        String entityJson = JSON.toJSONString(entity);

        return JSON.parseObject(entityJson, cla);
    }

    /**
     * 把entity转到dto
     *
     * @param entity
     * @param type
     * @param <T>
     * @return dto
     */
    public static <T> T convertToDTO(BaseEntity entity, TypeReference<T> type) {
        String entityJson = JSON.toJSONString(entity);

        return JSON.parseObject(entityJson, type);
    }


    /**
     * entityList转换dtoList
     *
     * @param entityList
     * @param type
     * @param <T>
     * @return
     */
    public static <T> List<T> convertToDTOList(List<?> entityList, TypeReference<List<T>> type) {
        String entityJson = JSON.toJSONString(entityList);
        return JSON.parseObject(entityJson, type);
    }


    /**
     * 把dto转化为entity
     *
     * @param dto
     * @param cla
     * @param <T>
     * @return entity
     */
    public static <T> T convertToEntity(BaseDTO dto, Class<T> cla) {

        String dtoJson = JSON.toJSONString(dto);

        return JSON.parseObject(dtoJson, cla);
    }

    /**
     * 把dto转化为entity
     *
     * @param dto
     * @param type
     * @param <T>
     * @return entity
     */
    public static <T> T convertToEntity(BaseDTO dto, TypeReference<T> type) {

        String dtoJson = JSON.toJSONString(dto);

        return JSON.parseObject(dtoJson, type);
    }
}

